package com.zeei.bfs.service;

import java.util.List;
import java.util.Map;

import com.zeei.bfs.vo.QueryMenuParamVO;
import com.zeei.common.vo.MenuVO;
import com.zeei.common.vo.PointSysTypeVO;
import com.zeei.common.vo.TreeNodeVO;
import com.zeei.common.vo.UserVO;

public interface MenuService {

	/**
	 * 方法描述：查询角色的菜单
	 * 
	 * @param roleId
	 * @return
	 */
	List<TreeNodeVO<MenuVO>> queryRoleMenu(Integer roleId, String systemType);

	/**
	 * 方法描述：增加角色的菜单
	 * 
	 * @param createId
	 * @param roleId
	 * @param menuList
	 * @return
	 */
	boolean addRoleMenu(Integer createId, Integer roleId, List<MenuVO> menuList);

	/**
	 * 方法描述：查询用户的菜单
	 * 
	 * @param userId
	 * @param loginUser
	 * @return
	 */
	List<TreeNodeVO<MenuVO>> queryUserMenu(Integer userId);

	/**
	 * 方法描述：增加用户的菜单
	 * 
	 * @param createId
	 * @param userId
	 * @param menuIds
	 * @return
	 */
	boolean addUserMenu(Integer createId, Integer userId, Integer[] menuIds);

	// /**
	// * 方法描述：查询用户拥有的菜单
	// *
	// * @param userId
	// * @return
	// */
	// List<MenuVO> queryUserHaveMenu(Integer userId);

	/**
	 * 方法描述：查询用户拥有的菜单的map,key为url
	 * 
	 * @param userId
	 * @return
	 */
	Map<String, MenuVO> queryUserMenuMap(Integer userId);

	/**
	 * 方法描述：查询用户的第一级菜单
	 * 
	 * @param userId
	 * @return
	 */
	// List<MenuVO> queryUserFirstMenu(Integer menuId);
	List<MenuVO> queryUserFirstMenu(UserVO userVO);

	/**
	 * 方法描述：查询用户的第一级菜单下的子菜单(左边树)
	 * 
	 * @param userId
	 * @param menuId
	 * @return
	 */
	List<TreeNodeVO<MenuVO>> queryUserChildMenu(Integer userId, Integer menuId, String systemType);

	/**
	 * 方法描述：查询用户自定义的菜单
	 * 
	 * @param searchMenuName
	 * @param userId
	 * @return
	 */
	// List<MenuVO> queryCustomMenu(String searchMenuName, Integer userId);

	/**
	 * 方法描述：保存用户菜单(自定义)
	 * 
	 * @param menuList
	 * @param userId
	 * @return
	 */
	boolean addUserMenu(List<MenuVO> menuList, Integer userId);

	/**
	 * 方法描述:查询菜单
	 *
	 * @param queryMenuParam
	 * @return
	 */
	List<TreeNodeVO<MenuVO>> queryMenu(QueryMenuParamVO queryMenuParam);

	/**
	 * 方法描述:添加菜单
	 *
	 * @param menu
	 * @return
	 */
	boolean addMenu(MenuVO menu, UserVO user);

	/**
	 * 方法描述:删除菜单
	 *
	 * @param menuIds
	 * @return
	 */
	boolean dropMenu(List<Integer> menuIds);

	/**
	 * 方法描述:验证菜单名称
	 *
	 * @param menu
	 * @return
	 */
	boolean validMenuName(MenuVO menu);

	/**
	 * 方法描述:编辑菜单
	 *
	 * @param menu
	 * @return
	 */
	boolean editMenu(MenuVO menu);

	/**
	 * 方法描述:查询菜单
	 *
	 * @return
	 */
	List<TreeNodeVO<MenuVO>> queryMenu();

	/**
	 * 方法描述:查询系统类型
	 *
	 * @return
	 */
	List<PointSysTypeVO> getSystemTable();

}
